10109. Tree Минимальная
глубина
Дано
бинарное дерево. Найдите его минимальную глубину. Минимальной
глубиной называется количество вершин в кратчайшем пути от корня
до ближайшего листа.
Определение дерева:
//Java
class TreeNode {
int
val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val =
x;
left
= null;
right
= null;
}
}
// C++
class TreeNode
{
public:
int
val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
Реализуйте
функцию minDepth которая возвращает минимальную
глубину дерева.
// Java
int minDepth (TreeNode
tree)
// C++
int minDepth(TreeNode *tree)
Пример
Функция minDepth возвращает 2,
так как кратчайший путь от корня 5 до ближайшего листа 10 содержит 2 вершины.
дерево
Если tree =
NULL, то минимальная глубина дерева равна 0.
Если
у дерева нет левого сына, то минимальная глубина дерева равна минимальной
глубине правого поддерева плюс 1.
Если
у дерева нет правого сына, то минимальная глубина дерева равна минимальной
глубине левого поддерева плюс 1.
Иначе
вычисляем минимальную глубину левого h1 и
правого h2
поддерева и возвращаем значение min(h1, h2) + 1.
Реализация алгоритма
int minDepth(TreeNode* tree)
{
Если tree =
NULL, то минимальная глубина дерева равна 0.
if (tree == NULL) return 0;
Если
у дерева нет левого сына, то минимальная глубина дерева равна минимальной
глубине правого поддерева плюс 1.
if (tree->left == NULL)
return minDepth(tree->right) + 1;
Если
у дерева нет правого сына, то минимальная глубина дерева равна минимальной
глубине левого поддерева плюс 1.
if (tree->right == NULL)
return minDepth(tree->left) + 1;
Вычисляем минимальную глубину левого Left и
правого Right поддерева. Возвращаем
значение min(Left, Right) + 1.
int Left = minDepth(tree->left);
int Right = minDepth(tree->right);
return min(Left, Right) + 1;
}
Java реализация
int minDepth(TreeNode tree)
{
if (tree == null) return 0;
if (tree.left == null)
return
minDepth(tree.right) + 1;
if (tree.right == null)
return
minDepth(tree.left) + 1;
int Left = minDepth(tree.left);
int Right = minDepth(tree.right);
return Math.min(Left, Right) + 1;
}